shell
在环境中存储了两种基本类型的数据——环境变量和shell
变量。shell
变量是bash
存放的少量数据,剩下的基本都是环境变量。
• printenv - 打印部分或所有的环境变量
• set - 设置 shell 选项
• export — 导出环境变量,让随后执行的程序知道。
• alias - 创建命令别名
2
3
4
# 1、shell环境
1、环境变量
如果 shell 环境中的一个成员既不可用 set 命令也不可用 printenv 命令显示,则这个变量是别名。 输入不带参数的 alias 命令来查看它们:
printenv USER //打印特定变量的数值
echo $USER //打印特定用户的数值
set | less //输出结果按照字母顺序排列:
alas //显示所有的别名
foo='this is a test'//添加环境变量
2
3
4
5
2、如何建立shell环境
当我们登录系统后,启动 bash 程序,并且会读取一系列称为启动文件的配置脚本, 这些文件定义了默认的可供所有用户共享的 shell 环境。精确的启动顺序依赖于要运行的 shell 会话 类型。有两种 shell 会话类型:一个是登录 shell 会话,另一个是非登录 shell 会话。
非登录shell
用户会读取一下文件。
文件 | 内容 |
---|---|
/etc/bash.bashrc | 应用于所有用户的全局配置文件。 |
~/.bashrc | 用户私有的启动文件。可以用来扩展或重写全局配置脚本中的设置。 |
登录shell会话的启动文件。
文件 | 内容 |
---|---|
/etc/profile | 应用于所有用户的全局配置脚本。 |
~/.bash_profile | 用户私人的启动文件。可以用来扩展或重写全局配置脚本中的设置。 |
~/.bash_login | 如果文件 ~/.bash_profile 没有找到,bash 会尝试读取这个脚本。 |
~/.profile | 如果文件 ~/.bash_profile 或文件 ~/.bash_login 都没有找到,bash 会试图读取 这个文件。 这是基于 Debian 发行版的默认设置,比方说 Ubuntu。 |
PATH 变量经常(但不总是,依赖于发行版)在 /etc/profile 启动文件中设置,修改PATH变量,添加目录到PATH目录列表的末尾。
3、激活我们的修改
我们对于文件.bashrc
的修改不会生效,直到我们关闭终端会话,再重新启动一个新的会话, 因为 .bashrc
文件只是在刚开始启动终端会话时读取。但是通过 source .bashrc
可以强迫bash
重新读取修改过的文件。
vi .bashrc //使用文编编辑器编辑文件
source .bashrc //bash重新读取编辑过的文件
2
# 2、vi编辑器
使用vi
编辑器的理由。
vi编辑器很多系统都预装了。
vi是轻量级且执行速度很快的编辑器。
vim(vi improved)是“vi”的一款高级替代版本。vim通常是linux系统“vi”的符号链接(别名)。
1、停止和启动vi
vi file//启动vi
:q //退出vi
:q! //修改了文件,强制不保存退出
:wq //修改了文件,保存退出
2
3
4
5
2、移动光标
按键 | 移动光标 |
---|---|
l or 右箭头 | 向右移动一个字符 |
h or 左箭头 | 向左移动一个字符 |
j or 下箭头 | 向下移动一行 |
k or 上箭头 | 向上移动一行 |
0 (零按键) | 移动到当前行的行首。 |
^ | 移动到当前行的第一个非空字符。 |
$ | 移动到当前行的末尾。 |
w | 移动到下一个单词或标点符号的开头。 |
W | 移动到下一个单词的开头,忽略标点符号。 |
b | 移动到上一个单词或标点符号的开头。 |
B | 移动到上一个单词的开头,忽略标点符号。 |
Ctrl-f or Page Down | 向下翻一页 |
Ctrl-b or Page Up | 向上翻一页 |
numberG | 移动到第 number 行。例如,1G 移动到文件的第一行。 |
G | 移动到文件末尾。 |
3、基本编辑
基本编辑:进入
vi
编辑器时,默认是编辑模式,在键盘上按下insert
或者i
后进入插入模式,此时可以输入文本。按下Esc
退出插入模式返回到命令模式。按下u
按键,当在命令模式下,vi 将会撤销你所做的最后一次修改。追加文本:vi 提供了追加文本的命令,明智地命名为"a"命令。 vi 提供了一种快捷方式("A"命令)来移动到当前行的末尾,并且能添加文本。
打开一行。这会在存在的两行之间插入一个空白行,并且进入插入模式。 把光标移动到某一行上,按下
o
,在当前行的下方打开一行,按下O
,在当前行的上方打开一行。删除文本:
命令 删除的文本 x 当前字符 3x 当前字符集其后的两个字符 dd 当前行 5dd 当前行及随后的四行文本 dW 从光标位置开始到下一个单词的开头 d$ 从光标位置开始到当前行的行尾 d0 从光标位置开始到当前行的行首 d^ 从光标位置开始到文本行的第一个非空字符 dG 从当前行到文件的末尾 d20G 从当前行到文件的第20行。 剪切、复制和粘贴文本:使用 d 命令,删除的部分被复制到一个 粘贴缓冲区中(看作剪切板)。过后我们执行小 p命令把剪切板中的文本粘贴到光标位置之后, 或者是大 P 命令把文本粘贴到光标之前。y 命令来“拉”(复制)文本,和 d 命令剪切文本的方式差不多。
链接行:大写的 J把行与行之间连接起来。
查找和替换:f命令查找一行。例如,命令 fa 会把光标定位到同一行中 下一个出现的"a"字 符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。
/
用于查找整个文件。当你输 入/命令后,一个"/"字符会出现在屏幕底部。下一步,输入要查找的单词或短语后, 按下回车。光标就会移动到下一个包含所查找字符串的位置。通过n
命令来重复先前的查找。全局查找和替换:vi 使用 ex 命令来执行查找和替代操作。
:%s/Line/line/g //全局将Line替换为line
1条目 含义 : 运行一个 ex
命令% 指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范 围也 可以用 1,5 来代替(因为我们的文件只有5行文本),或者用 1,$ 来代替,意 思是 “ 从第一行到文件的最后一行。” 如果省略了文本行的范围,那么操作只对 当前行生效。 s 指定操作。在这种情况下是,替换(查找与替代)。 /Line/line 查找类型与替代文本。 g 这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操 作。如果省略 g,则 只替换每个文本行中第一个匹配的字符串。 :%s/Line/line/gc //全局将Line替换为line,并会出来提示框。
1按键 行为 y 执行替换操作 n 跳过这个匹配的实例 a 对这个及随后所有匹配的字符串执行替换操作。 q or esc 退出替换操作。 l 执行这次替换并退出。l 是 “last” 的简写。 Ctrl-e, Ctrl-y 分别是向下滚动和向上滚动。用于查看建议替换的上下文。 编辑多个文件
vi file1 file2...
文件之间转换。
:n
从这个文件转到下一个文件。在切换这些命令的时候可能需要执行:w 1.txt
来先保存编辑的文件,然后再切换。:N
回到先前的文件。我们可以查看正在编辑的文件列表,使用:buffers
命令。运行这个 命令后,屏幕顶部就会显示出一个文件列表。这时要使用:buffer 命令, 其后加上缓冲区号码,来转换文件。从一个文件复制内容到另一个文件。
:buffer 1//转到缓冲区编号为1的文件 通过`yy`等命令来复制内容。 :buffer 2//转到编号为的文件,将粘贴区的文件进行复制。
1
2插入整个文件到另一个文件。
:r foo.txt //把指定的文件插入到光标位置之前
1保存工作
:wq //保存退出 :w 1.txt//保存特定的文件,如果1.txt不存在,会将正在编辑的文件另存为1.txt
1
2
# 3、自定制shell提示符
1、解剖一个提示符
默认提示符:包含了用户名、主机名和当前工作目录。提示符是由PS1(prompt string one)
的环境变量定义的。
[root@iZwtrtjgg3qrk8Z ~]#
echo PS1 //[\u@\h \W]\$
2
提示符中用到的转义字符。
\a 以ASCII格式编码的铃声,当遇到这个转义序列时,计算机会发出嗡嗡的响声。
\d 以日、月、天格式俩表示当前日期
\h 本地机器的主机名,不带末尾的域名
\H 完整的主机名
\j 运行在当前shell会话中的工作数
\l 当前终端设备名
\n 换行符
\r 回车符
\s shell程序名
\t 以24小时制,'hours:minutes:seconds'的格式表示当前时间
\T 以12小时制表示当前时间
\@ 以12小时工作制,AP/PM表示当前时间
\A 以24小时工作制,hours:minutes格式表示当前时间
\u 当前用户名
\v shell程序的版本号
\V Version and release numbers of the shell
\w 当前工作目录名
\W 当前功能工作目录的最后部分。
\! 当前命令的历史号
\# 当前会话中的命令数
\$ 表示$字符,超级管理员显示#字符
\[ 标志着一系列或多个非打印字符的开始
\] 标志着非打印字符的技术。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2、自定义提示符
可以用一个变量将当前提示符存起来,也可以在某个文件定义该提示符,然后导出,使之提示符永久存在。
1、用一个变量将当前提示符保存起来;
ps1_old=$PS1;
2、自定义提示符
PS1="\a\h"。
2
3
4